import axios from 'axios'
import {Local} from './local'
import {ElMessage, ElMessageBox} from "element-plus";
import emitter from "@/utils/event-bus";
import {MittEventEnum} from "@/utils/enum/mitt-event-enum";
import {LoginStateEnum} from "@/utils/enum/enum";
import {useRouter} from 'vue-router'


// 创建一个 axios 实例
const service = axios.create({
    // baseURL: import.meta.env.VITE_APP_BASE_PRO_PATH, //打包开启
    baseURL: import.meta.env.VITE_APP_BASE_API as any, // 所有的请求地址前缀部分 打包关闭
    timeout: 60000, // 请求超时时间毫秒
    withCredentials: true, // 异步请求携带cookie
    headers: {
        // 设置后端需要的传参类型
        'Content-Type': 'application/json',
        'token': 'your token',
        'X-Requested-With': 'XMLHttpRequest',
    },
})

// 添加请求拦截器
service.interceptors.request.use(
    function (config) {
        // console.log("请求前的config")
        // console.log(config);
        if (Local.get('token') && config['url'] != "/oas/oauth/token")
            config.headers.Authorization = Local.get('token');
        // 在发送请求之前做些什么
        return config
    },
    function (error) {
        // 对请求错误做些什么
        console.log(error)
        return Promise.reject(error)
    }
)

// 添加响应拦截器
service.interceptors.response.use(
    function (response) {
        // 2xx 范围内的状态码都会触发该函数。
        // 对响应数据做点什么
        // dataAxios 是 axios 返回数据中的 data
        const dataAxios = response.data
        console.log("dataAxios")
        console.log(dataAxios)
        // 这个状态码是和后端约定的
        if (dataAxios.code != 200) {
            ElMessage({
                message: dataAxios.msg || '系统出错',
                type: 'error'
            })
        } else {
            if(dataAxios.msg){
                ElMessage({
                    message: dataAxios.msg,
                    type: 'success'
                })
            }
        }
        return dataAxios
    },
    function (error) {
        // 超出 2xx 范围的状态码都会触发该函数。
        // 对响应错误做点什么
        const {code, msg} = error.response.data
        if (code === 20002) {  // token 过期
            Local.clear(); // 清除浏览器全部缓存
            emitter.emit(MittEventEnum.LOGIN_STATE_EVENT, LoginStateEnum.EXIT_OR_OVERDUE_TOKEN)// 发送事件已经过期
            ElMessage({
                message: '注册/登陆后，可以保存文件至云端！^-^ ~',
                type: 'success'
            })
        } else {
            ElMessage({
                message: msg || '系统出错',
                type: 'error'
            })
        }
        return Promise.reject(new Error(msg || 'Error'))
    }
)

export default service

